/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.ModeloConvocatoria;
import com.ipartek.formacion.gestformwww.modelo.ModeloEmpresa;
import com.ipartek.formacion.gestformwww.modelo.ModeloProcedencia;
import com.ipartek.formacion.gestformwww.modelo.beans.Candidato;
import com.ipartek.formacion.gestformwww.modelo.beans.Convocatoria;
import com.ipartek.formacion.gestformwww.modelo.beans.Empresa;
import com.ipartek.formacion.gestformwww.modelo.beans.Estado;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.Procedencia;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Iratxe-Jon
 */
public class ImportarCandidatoAccion implements Accion {

    private final String listarconvocatorias = "listar-convocatorias-accion";
    private final String importarCandidatoJSP = "importar-candidato";

    /**
     * Visualiza los candidatos que estan en otras convocatorias
     * @param servlet
     * @param request
     * @param response
     * @return el router
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession(false);
        AccionRouter router = null;
        FiltroCandidato filtro = null;
        AccionServlet as = (AccionServlet) servlet;
        String path = null;
        int numPags;
        int numerocandidatos = 0;
        int conId = 0;
        Convocatoria convocatoria = null;
        boolean existeconvocatoria = false;
        ArrayList<Candidato> candidatos = null;
        ModeloCandidato modelo = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
        ModeloConvocatoria mconvocatoria = (ModeloConvocatoria) servlet.getServletContext().getAttribute("ModeloConvocatoria");


        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        if (sesion.getAttribute("usuario") != null) {
            if (sesion.getAttribute("filtrocandidatossignar") != null) {
                filtro = (FiltroCandidato) sesion.getAttribute("filtrocandidatosasignar");
            } else {
                filtro = new FiltroCandidato(bundle);
            }
            //if(Verificador.numeroValido(request.getParameter("idCon")) || (request.getAttribute("idCon") != null)){
            if (request.getParameter("idCon") != null) {
                conId = Integer.parseInt(request.getParameter("idCon"));
                existeconvocatoria = true;

            } else if (request.getAttribute("idCon") != null) {
                conId = (Integer) request.getAttribute("idCon");
                existeconvocatoria = true;
            }
            if (existeconvocatoria) {

                if ((request.getParameter("filtroDNICandidato") != null)) {
                    filtro.setCanNIF(request.getParameter("filtroDNICandidato"));
                }
                if ((request.getParameter("filtroNombreCandidato") != null)) {
                    filtro.setNom(request.getParameter("filtroNombreCandidato"));
                }
                if ((request.getParameter("filtroApe1Candidato") != null)) {
                    filtro.setApe1(request.getParameter("filtroApe1Candidato"));
                }
                if ((request.getParameter("filtroApe2Candidato") != null)) {
                    filtro.setApe2(request.getParameter("filtroApe2Candidato"));
                }
                if ((request.getParameter("filtroOrden") != null)) {
                    filtro.setOrden(request.getParameter("filtroOrden"));
                }
                if ((request.getParameter("filtroColumna") != null)) {
                    filtro.setColumnaFiltrar(request.getParameter("filtroColumna"));
                }
                if ((request.getParameter("RegistroPagina") != null)) {
                    filtro.setElementospag(request.getParameter("RegistroPagina"));
                }
                if ((request.getParameter("id") != null)) {
                    filtro.setPagsiguiente(request.getParameter("id"));
                }
                if ((request.getParameter("idCon") != null)) {
                    filtro.setConvId(Integer.parseInt(request.getParameter("idCon")));
                }
                filtro.setNoConvocatoria(true);
                sesion.setAttribute("filtrocandidatosasignar", filtro);

                try {
                    candidatos = modelo.listarCandidatos(filtro);

                    numerocandidatos = modelo.contarCandidatos(filtro);
                    convocatoria = mconvocatoria.visualizarConvocatoria(conId);
                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(ImportarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    sesion.setAttribute("excepciones", ex.getMessage());
                }

                request.setAttribute("listaCandidatosAsignar", candidatos);
                numPags = filtro.getElementospag();

                if (numerocandidatos == 0) {
                    ResourceBundle errores = (ResourceBundle) servlet.getServletContext().getAttribute("errores-mapeo");
                    request.setAttribute("error", errores.getString("error-sin-resultados"));
                }
                request.setAttribute("numeroCandidatos", numerocandidatos);
                int totalpaginas = numerocandidatos / numPags;
                if ((numerocandidatos % numPags) != 0) {
                    totalpaginas++;
                }
                request.setAttribute("conNom", convocatoria.getConNom());
                request.setAttribute("totalPagAsignarCandidato", totalpaginas);
                request.setAttribute("contenido", importarCandidatoJSP);

                request.setAttribute("listaCandidatos", "mostrar");

                router = new AccionRouter("principal");
            } else {
                //router = new AccionRouter("inicio", false);


                request.setAttribute("contenido", importarCandidatoJSP);

                request.setAttribute("listaCandidatos", "noMostrar");

                router = new AccionRouter("principal");
            }
            //} else {
            //router = new AccionRouter("inicio", false);
            //}
        } else {
            try {
                router = as.getFactory().getAction(as.getNombreClaseRecurso(listarconvocatorias), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(VisualizarAsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(VisualizarAsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(VisualizarAsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            }

        }


        return router;
    }
}
